package com.yby6.web.controller.tool;

import com.tencentcloudapi.captcha.v20190722.CaptchaClient;
import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultRequest;
import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultResponse;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.yby6.common.utils.ip.IpUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.yby6.common.core.AjaxResult;

import javax.servlet.http.HttpServletRequest;

/**
 * @program: yangbuyi-rbac
 * @ClassName: TencentCaptchaController
 * @create: 2021-06-02 10:00
 * @author: Yang Shuai
 * @since： JDK1.8
 * @TencentCaptchaController: 腾讯滑块验证码$
 **/

@RestController
@RequestMapping("tencentCaptcha")
public class TencentCaptchaController {

	@Autowired
	private HttpServletRequest httpServletRequest;

	/**
	 * 腾讯验证码
	 *
	 * @param randStr 兰德str
	 * @param token   令牌
	 * @return {@link AjaxResult}
	 */
	@RequestMapping(value = "tencentCaptcha",method = RequestMethod.POST)
	public AjaxResult tencentCaptcha(@RequestParam String randStr,@RequestParam String token) {
		try {
			/*
			Action	是	String	公共参数，本接口取值：DescribeCaptchaResult。
			Version	是	String	公共参数，本接口取值：2019-07-22。
			Region	否	String	公共参数，本接口不需要传递此参数。
			CaptchaType	是	Integer	固定填值：9。可在控制台配置不同验证码类型。
			Ticket	是	String	前端回调函数返回的用户验证票据
			UserIp	是	String	透传业务侧获取到的验证码使用者的IP
			Randstr	是	String	前端回调函数返回的随机字符串
			CaptchaAppId	是	Integer	验证码应用ID
			AppSecretKey	是	String	用于服务器端校验验证码票据的验证密钥，请妥善保密，请勿泄露给第三方
			BusinessId	否	Integer	业务 ID，网站或应用在多个业务中使用此服务，通过此 ID 区分统计数据
			SceneId	否	Integer	场景 ID，网站或应用的业务下有多个场景使用此服务，通过此 ID 区分统计数据
			MacAddress	否	String	mac 地址或设备唯一标识
			Imei	否	String	手机设备号
			NeedGetCaptchaTime	否	Integer	是否返回前端获取验证码时间，取值1：需要返回
			* */
			Credential cred = new Credential("AKID8AtMYiNc6JQgaDAcLm60qpT3AKHytvGK", "4tkIUn00aI0UvkCzY12lVzD95tQjprc8");

			HttpProfile httpProfile = new HttpProfile();
			httpProfile.setEndpoint("captcha.tencentcloudapi.com");

			ClientProfile clientProfile = new ClientProfile();
			clientProfile.setHttpProfile(httpProfile);

			CaptchaClient client = new CaptchaClient(cred, "", clientProfile);
			DescribeCaptchaResultRequest req = new DescribeCaptchaResultRequest();
			// 	固定填值：9。可在控制台配置不同验证码类型
			req.setCaptchaType(9L);
			// 	前端回调函数返回的用户验证票据
			req.setTicket(token);
			// 透传业务侧获取到的验证码使用者的IP
			String ipAddr = IpUtils.getIpAddr(httpServletRequest);
			req.setUserIp(ipAddr);
			// 前端回调函数返回的随机字符串
			req.setRandstr(randStr);
			// 验证码应用ID
			req.setCaptchaAppId(2060673535L);
			// 用于服务器端校验验证码票据的验证密钥，请妥善保密，请勿泄露给第三方
			req.setAppSecretKey("0Q_HrLda3Uu2cVn5GHKRQ2w**");
			// 是否返回前端获取验证码时间，取值1：需要返回
			req.setNeedGetCaptchaTime(1L);
			// 场景 ID，网站或应用的业务下有多个场景使用此服务，通过此 ID 区分统计数据
			req.setSceneId(1L);
			DescribeCaptchaResultResponse resp = client.DescribeCaptchaResult(req);
			return AjaxResult.success(DescribeCaptchaResultResponse.toJsonString(resp));
		} catch (TencentCloudSDKException e) {
			System.out.println(e.toString());
			return AjaxResult.error(e.getCause().getMessage());
		}
	}

}
